#include"ListNode.h"
ListNode* Init_List(ListNode** ret)
{
	*ret = Buy_List(-100);
}
ListNode* Buy_List(Newtype x)
{
	ListNode* ret = (ListNode*)malloc(sizeof(ListNode));
	assert(ret);
	ret->date = x;
	ret->next = ret;
	ret->prev = ret;
	return ret;
}
void Print_List(ListNode* ret)
{
	ListNode* num = ret->next;
	while (num != ret)
	{
		printf("%d->", num->date);
		num = num->next;
	}
	printf("\n");
}
ListNode* Find(ListNode* pead, Newtype x)
{
	assert(pead);
	ListNode* num = pead->next;
	while (pead != num)
	{
		if (num->date == x)
			return num;
		num = num->next;
	}
	return NULL;
}
void Add_front_List(ListNode* pead, Newtype x)
{
	assert(pead);
	ListNode* ret = Buy_List(x);
	// pead ret pead->next
	ret->prev = pead;
	ret->next = pead->next;
	pead->next->prev = ret;
	pead->next = ret;
	//Add_end_List(pead->next, x);
}
void Add_end_List(ListNode* pead, Newtype x)
{
	assert(pead);
	ListNode* ret = Buy_List(x);
	//pead->prev ret pead
	ret->next = pead;
	ret->prev = pead->prev;
	pead->prev->next = ret;
	pead->prev = ret;
	//Add_front_List(pead->prev, x);
}
void Insert_List(ListNode* pos, Newtype x)
{
	Add_front_List(pos, x);
}
void Dele_List(ListNode* pos)
{
	assert(pos&&(pos->next != pos));
	ListNode* first = pos->prev;
	ListNode* end = pos->next;
	first->next = end;
	end->prev = first;
	free(pos);
	pos = NULL;
}
void Dele_end_List(ListNode* pead)
{
	assert(pead->next != pead&&pead);
	Dele_List(pead->prev);
}
void Dele_front_List(ListNode* pead)
{
	assert(pead->next != pead&&pead);
	Dele_List(pead->next);
}
void Destory_List(ListNode* pead)
{
	assert(pead);
	ListNode* pucr = pead;
	while (pucr != pead)
	{
		ListNode* next = pucr->next;
		free(next);
		next == NULL;
	}
	free(pead);
	pead == NULL;
}